#ifndef YENTITY_FUNCTION_LINKER_H
#define YENTITY_FUNCTION_LINKER_H

		#define T1 template <class C>
		#define T2 template <class C, class D>
		#define T3 template <class C, class D, class E>
		#define T4 template <class C, class D, class E, class F>
		
			void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)());
		T1	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C));
		T2	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D));
		T3	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D,E));
		T4	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D,E,F));
		
		T1	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C), C c);
		T2	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D), C c, D d);
		T3	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D,E), C c, D d, E e);
		T4	void connect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D,E,F), C c, D d, E e, F f);
		
			void disconnect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)());
		T1	void disconnect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C));
		T2	void disconnect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D));
		T3	void disconnect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D,E));
		T4	void disconnect (const char *signalName , Entity* destinationEntity , void(Entity::*fp)(C,D,E,F));
		
			void call ( const char *signalName);
		T1	void call ( const char *signalName, C c);
		T2	void call ( const char *signalName, C c, D d);
		T3	void call ( const char *signalName, C c, D d, E e);
		T4	void call ( const char *signalName, C c, D d, E e, F f);
		
#endif
